package ch02_data.generics.problem;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * 类型摩擦带来的问题
 *
 * @author guodd
 * @version 1.0 use jdk 1.8
 */
public class Problem01<T> {
    // 1、泛型不能用于显式地引用运行时类型的操作之中，例如：instanceof、new
    @Test
    public void test01() throws Exception {
        // T t1 = new T(); //error
        T o = (T) new Object();
        // T[] ts = new T[100]; //error
        // boolean b = t instanceof T; //error
    }

    // 2、基本数据类型不能作为参数类型
    @Test
    public void test02() {
        // List<int> aa;
        List<Integer> aa;
        List<Integer>[] aa01;
    }

    // 3、数组，可以声明泛型数组，但是不能直接创建泛型数组
    @Test
    public void test03() {
        List<Integer>[] aa;
        // List<Integer>[] bb = new ArrayList<Integer>[1];
        List<Integer>[] cc = new ArrayList[1];
    }

    // 4、重载，完全一样的两个重载方法，由于泛型摩擦会编译不通过
    @Test
    public void test04() {
    }

    // 5、父类劫持了接口，子类与父类继承用一个泛型接口，如果两个泛型类型不同，将会被父类类型劫持
    @Test
    public void test05() {
    }
}
